package ru.pb.game.network.engine.client.packets.sendable;
import ru.pb.game.network.engine.client.packets.GameServerToClientPacket;
import ru.pb.game.objects.model.CHANNEL;
import ru.pb.game.objects.model.clan.Clan;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.room.Room;

public class PROTOCOL_LOBBY_GET_ROOMLIST_ACK extends GameServerToClientPacket
{
	/*
	 * [18:25:34] PHP_NagibatoR: ну а в л2 с коммисионкой тоже самое
	 * protected void writeImpl()
	 * {
	 * super.writeImpl();
	 * writeD((int) (System.currentTimeMillis() / 1000L));
	 * writeD(_part);
	 * writeD(_endIndex - _startIndex);
	 * for(int i = _startIndex; i < _endIndex; i++)
	 * writeCommissionItem(_items[i]);
	 * }
	 * CommissionItem[] itemsArray = items.toArray(new CommissionItem[items.size()]);
	 * int pageCount = itemsArray.length / CommissionManager.PACKET_PART_SIZE;
	 * // пакеты нужно посылать в обратном порядке
	 * for(int i = pageCount; i >= 0; i--)
	 * player.sendPacket(new ExResponseCommissionList.CommissionList(i, itemsArray, i * CommissionManager.PACKET_PART_SIZE, Math.min(i * CommissionManager.PACKET_PART_SIZE +
	 * CommissionManager.PACKET_PART_SIZE, itemsArray.length)));
	 */
	
	//04:0b
	//21:00:00:00
	//01:00:00:00
	//0f:00:00:00
	
	//0f:00:00:00
	//48:61:69:6c:20:61:6e:64:20:4b:69:6c:6c:21:00:00:84:04:98:76:b8:3d:00
	//0b
	//00
	//00
	//01 - тип
	//05:04:
	//0a - slot count
	//03
	//2b
	//00
	//04
	
	//38 
	
	private CHANNEL _ch;

	/**
	 * Создание комнаты
	 * 
	 * @param ch
	 */
	public PROTOCOL_LOBBY_GET_ROOMLIST_ACK(CHANNEL ch)
	{
		_ch = ch;
	}

	@Override
	public void runImpl()
	{
		// _log.info("Комнат: " + _ch.getRooms().size());
		// CHANNEL ch = ChannelHolder.getChannel(getClient().getChannelId());
		// _log.info("Send to " + getClient().getPlayer().getName() + "[" + getClient().getPlayer().getObjectId() + "]" + " channelId: " + ch.getId() + " hashCode of player list: " +
		// ch.getAllPlayers().hashCode());
	}

	@Override
	public void writeImpl()
	{
		writeH(2820);
		// список комнат
		writeD(_ch.getRooms().size()); // Максимум
		writeD(0); // ХЗ
		writeD(_ch.getRooms().size()); // Общее кол-во

		for(int i = 0; i < _ch.getRooms().size(); i++)
		{
			Room r = _ch.getRoom(i);
			if(r != null && r.name != null)
			{
				writeD(i); // Номер комнаты
				writeS(r.name, 23); // название комнаты
				writeC(r.map_id); // Карта
				writeC(0); // ХЗ
				writeC(0); // ХЗ
				writeC(r.room_type); // Тип Игры
				writeBoolC(r.isInFight()); // Статус комнаты(1 = Бой, 0 = ожидание)
				writeC(r.getAllPlayers().size()); // Количество игроков в комнате... =)
				writeC(r.getSlotCount()); // Максимальное количество игроков в комнате... =)
				writeC(1); // Пинг = 5 - Макс, 0 - мин
				writeC(0x2b); // Иконка "На особых оружиях" =)
				writeBoolC( !r.password.isEmpty()); // Иконка "под паролем"
				writeC(r.special); // Тип игры)
			}
		}

		// Список ожидающих игроков
		writeD(_ch.getWaitPlayers().size()); // Максимум
		writeD(0); // ХЗ
		writeD(_ch.getWaitPlayers().size()); // Общее кол-во

		for(int i = 0; i < _ch.getWaitPlayers().size(); i++)
		{
			Player p = _ch.getWaitPlayers().get(i);
			if(p != null)
			{
				writeD(i); // Номер
				Clan c = p.getClan();
				writeC(c != null ? c.getClanInfo().getClanLogo().getLogo1() : 255);
				writeC(c != null ? c.getClanInfo().getClanLogo().getLogo2() : 255);
				writeC(c != null ? c.getClanInfo().getClanLogo().getLogo3() : 255);
				writeC(c != null ? c.getClanInfo().getClanLogo().getLogo4() : 255);
				writeC(c != null ? c.getClanInfo().getClanLogo().getLogoColor() : 0);
				writeS(c != null ? c.getClanInfo().getClanName() : "", 16); //название
				//writeB(new byte[16]); // Просто мусор
				writeH(p.getPlayerInfos().getRank()); // ранк
				writeS(p.getPlayerInfos().getPlayerName(), 33); // имя
				writeC(0); // Цвета игрока(0 - белый, 1 - красный... )
			}
		}
	}
}